package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.bo.ReportBo;
import com.wande.dataplatform.domain.dto.ChartDataDTO;
import com.wande.dataplatform.domain.vo.ReportVO;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 报表设计服务接口
 *
 * @author wande
 */
public interface IReportService {

    /**
     * 查询报表设计列表
     *
     * @param bo 查询条件
     * @param pageQuery 分页参数
     * @return 报表设计列表
     */
    TableDataInfo<ReportVO> queryPageList(ReportBo bo, PageQuery pageQuery);

    /**
     * 查询报表设计列表
     *
     * @param bo 查询条件
     * @return 报表设计列表
     */
    List<ReportVO> queryList(ReportBo bo);

    /**
     * 查询报表设计详情
     *
     * @param id 主键
     * @return 报表设计详情
     */
    ReportVO queryById(Long id);

    /**
     * 新增报表设计
     *
     * @param bo 报表设计业务对象
     * @return 新增结果
     */
    Boolean insertByBo(ReportBo bo);

    /**
     * 修改报表设计
     *
     * @param bo 报表设计业务对象
     * @return 修改结果
     */
    Boolean updateByBo(ReportBo bo);

    /**
     * 批量删除报表设计
     *
     * @param ids 主键集合
     * @return 删除结果
     */
    Boolean deleteByIds(Collection<Long> ids);

    /**
     * 获取图表数据
     *
     * @param reportId 报表ID
     * @param chartId 图表ID
     * @param filters 过滤条件
     * @return 图表数据
     */
    ChartDataDTO getChartData(Long reportId, String chartId, Map<String, Object> filters);

    /**
     * 导出报表
     *
     * @param reportId 报表ID
     * @param format 导出格式: PDF, EXCEL, IMAGE
     * @return 导出文件字节数组
     */
    byte[] exportReport(Long reportId, String format);

    /**
     * 发布报表
     *
     * @param id 报表ID
     * @return 发布结果
     */
    Boolean publishReport(Long id);

    /**
     * 下线报表
     *
     * @param id 报表ID
     * @return 下线结果
     */
    Boolean offlineReport(Long id);
}
